<?
	/* Se asegura que el archivo es incluido por el index */
		defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Persona_frm( $this );

	class Persona_frm extends Frm
	{
	function setValue ( $ncPersona )
		{
			$cSql = "SELECT Per.ncGrupo, Per.ncVisibilidad, Per.ncPersona, Per.cNombre, Per.cApellido, Per.cAlias, Per.cObservacion, Per.cCelular, Per.dNacimiento, Per.ncTipoDocumento, Per.nDocumento, PDo.ncDomicilio, Per.ncGenero, Per.ncProfesion, Per.cImagen
								FROM atPersona as Per
									LEFT JOIN atPersonaDomicilio as PDo
										ON PDo.ncPersona = Per.ncPersona
										AND ncTipoDomicilio = ". DOMICILIO_PARTICULAR . "
								WHERE Per.ncPersona = $ncPersona
								ORDER BY bPorOmision DESC";
			$aRow = $this->oDatabase->getArray($cSql);
			$this->setFieldsArray ( $aRow );
			$this->aFields['Documento']->aInput['ncTipoDocumento']->setValue( $aRow['ncTipoDocumento'] );
			$this->aFields['Documento']->aInput['nDocumento']->setValue( $aRow['nDocumento'] );
			
			// Carga los Email
				$cSql = "SELECT cEmail FROM atPersonaEmail WHERE ncPersona = $ncPersona";
				$aEmail = $this->oDatabase->getArray($cSql);
				$this->aFields['aEmail']->setValue( implode(',', $aEmail ) );
			return $aRow;
		}
	function verify()
	{
		$ncPersona = getParam('ncPersona');
		$cNombre = getParam('cNombre');
		$cApellido = getParam('cApellido');
		$cCelular = getParam('cCelular');
		$cEmail = getParam('aEmail_txt');
		if ( $ncPersona ) $cFiltro = " AND ncPersona <> $ncPersona ";
		if ( $cApellido   != "" && $cNombre != "")
		{
			list ( $ncPersonaExistente ,$cApellidoExistente, $cNombreExistente )= $this->oDatabase->getArray("SELECT ncPersona, cApellido, cNombre FROM atPersona WHERE cApellido like '%$cApellido%' AND cNombre like '%$cNombre%' $cFiltro ", 0, 1);
			if ( $ncPersonaExistente ) $this->addMessage( "Verifique que la persona no este ya cargada , en la base esta " . 	$this->oModule->makeAction ( $cNombre . ' ' . $cApellido , VER_PERSONA , "ncPersona=" . $ncPersonaExistente ) , FORM_ADVERTENCIA );
		}
		if ( $cCelular != "")
		{
			list ( $ncPersonaExistente ,$cApellidoExistente, $cNombreExistente )= $this->oDatabase->getArray("SELECT ncPersona, cApellido, cNombre FROM atPersona WHERE cCelular = '$cCelular' $cFiltro ", 0, 1);
			if ( $ncPersonaExistente ) $this->addMessage( "Ya hay una persona cargada con el mismo celular. Verifique " . 	$this->oModule->makeAction ( 'aqui ', VER_PERSONA , "ncPersona=" . $ncPersonaExistente ) , FORM_ERROR );
		}
		if ( $cEmail != "")
		{
			list ( $ncPersonaExistente ,$cApellidoExistente, $cNombreExistente )= $this->oDatabase->getArray("SELECT PEm.ncPersona, cApellido, cNombre FROM atPersona as Per JOIN atPersonaEmail as PEm ON Per.ncPersona = PEm.ncPersona WHERE cEmail = '$cEmail' $cFiltro ", 0, 1);
			if ( $ncPersonaExistente ) $this->addMessage( "Ya hay una persona cargada con el mismo email. Verifique " . 	$this->oModule->makeAction ( 'aqui ', VER_PERSONA , "ncPersona=" . $ncPersonaExistente ) , FORM_ADVERTENCIA );
		}
	}
	function Persona_frm( &$oModule )
		{
			$this->Frm( $oModule );
			if ( $_GET['close'] ) 	$this->cRefreshFunction = 'refreshDocument';
			if ( $_GET['level'] ) 	$this->setOptionsLevel( $_GET['level'] );
			//Crea los Objetos de los campos de edicion
			$this->aFields['ncVisibilidad'] 		= new InputList ( "Visibilidad", "ncVisibilidad" );
			$this->aFields['ncPersona']			= new Input( "Codigo", "ncPersona", '', false, true );
			$this->aFields['cNombre'] 			= new InputText ( "Nombre", "cNombre" );
			$this->aFields['cApellido'] 			= new InputText ( "Apellido", "cApellido" );
			$this->aFields['aEmail']				= new InputMultiple( "Email particular", "aEmail" );
			$this->aFields['cCelular']				= new InputText ( "Celular particular", "cCelular" );
			$this->aFields['cAlias']					= new InputText ( "Alias", "cAlias" );
			$this->aFields['cObservacion']		= new InputText ( "Observacion", "cObservacion" );
			$this->aFields['dNacimiento']		= new InputDate ( "Nacimiento", "dNacimiento" );
			$this->aFields['Documento']		= new InputArray ( "Documento");
			$this->aFields['ncProfesion']		= new InputList ( "Profesion", "ncProfesion" );
			$this->aFields['ncGenero']			= new InputList ( "Genero",  "ncGenero" );
			$this->aFields['ncLista'] 				= new InputList( "Lista", "ncLista" );
			$this->aFields['cImagen']				= new InputPhoto( "Foto" ,"cImagen" , '', 100, 100,  "files/personas");
			$this->aFields['ncUbicacion']   	= new InputLookUp( 'Ubicacion', 'ncUbicacion' );

			$this->aFields['aEmail']->setInput( new InputText( "cEmail" ) );
			$this->aFields['Documento']->addInput( new InputList ( "Tipo", "ncTipoDocumento" ) );
			$this->aFields['Documento']->addInput( new InputNumber ( "Nro", "nDocumento" ) );

		}
	function make ( $cOptions = '')
	{
		$this->mergeOptions( $cOptions );
		// Si Recibe la Pk => busca los datos
		if ( $this->isRetrievable() &&  $this->aFields['ncPersona']->getValue() )
		{
			$aRow = $this->setValue ( $this->aFields['ncPersona']->getValue() );
			// Verifica que tenga Permisos
			$ncMiGrupo = obtenerMiGrupo();
			$bPermisoEscritura = ($aRow['ncVisibilidad'] == VISIBILIDAD_PUBLICO || $aRow['ncGrupo'] == $ncMiGrupo);
			if ( !$bPermisoEscritura )
			{
				$bPermisoLectura = ($aRow['ncVisibilidad'] != VISIBILIDAD_PRIVADO || $aRow['ncGrupo'] == $ncMiGrupo);
				if ( $bPermisoLectura )
				{
					$oDet = $this->oModule->loadClass( 'persona_lst' );
					$oDet->makeDet();
					return true;
				} else
				{
					addMessage( "No tiene permisos" );
					return false;
				}
			}
		}
		return parent::make( $cOptions );
	}
	function setLevel( $nLevel)
		{
			switch ( $nLevel )
			{
				case 1:
					$this->aInput = array( 'ncPersona', 'cNombre', 'cCelular' , 'ncProfesion', 'ncUbicacion', 'ncLista' );
					break;
				case 2: // Alta y Modificacion Persona
					$this->aInput = array( 'ncPersona', 'ncVisibilidad', 'cNombre', 'cApellido', 'aEmail', 'cCelular', 'ncProfesion', 'ncDomicilio' );
					$this->aFields['ncPersona']->setHidden();
					break;
				case 3: // Alta datos especiales
					$this->aFields['ncPersona']->setHidden();
					$this->aInput = array( 'ncPersona', 'cAlias','cObservacion', 'dNacimiento', 'Documento', 'ncGenero', 'cImagen' );
					break;
				case 4: // Alta  simple (sin domicilio)
					$this->aFields['ncPersona']->setHidden();
					$this->aInput = array( 'ncPersona', 'ncVisibilidad', 'cNombre', 'cApellido', 'aEmail', 'cCelular', 'ncProfesion',  'ncGenero' );
					break;
				case 5: // Alta completa
					$this->aInput = array( 'ncPersona', 'ncVisibilidad', 'cNombre', 'cApellido', 'aEmail', 'cCelular', 'ncProfesion', 'ncDomicilio', 'dNacimiento', 'Documento', 'ncGenero', 'cImagen', 'Documento' );
					$this->aFields['ncPersona']->setHidden();
					break;
			}
		}
	function initializeForm()
		{
			$this->aFields['ncDomicilio'] = $this->oModule->loadClass( 'Domicilio_frm' );
			$this->aFields['ncDomicilio']->setMandatory( false );
			// Configura el Titulo
			$this->setLabel( "Persona" );
			return true;
		}
	function initializeField( $cField , &$oField )
		{
			switch ( $cField )
			{
				case 'cNombre':
				// Configura el Nombre
					$oField->setMandatory( $this->isMandatory() );
					$oField->setLength(30);
					if ( $this->getOptionsLevel() > 1 ) $oField->setOnBlur($this->getVerifyEvent());
				break;
				case 'cApellido':
					$oField->setMandatory( $this->isMandatory() );
					$oField->setLength(40);
					if ( $this->getOptionsLevel() > 1 ) $oField->setOnBlur($this->getVerifyEvent());
				break;
				case 'aEmail':
						$oField->setForm( $this );
						$oField->oInput->setLength(50);
						$oField->oInput->setWidth(250);
						$oField->setWidth(250);
						if ( $this->getOptionsLevel() > 1 ) $oField->oInput->setOnBlur($this->getVerifyEvent());
				break;
				case 'ncLista':
					$cSql = "SELECT ncLista, cdLista FROM atLista";
					$oField->setMatrix( $this->oDatabase->getMatrix( $cSql ) );
				break;
				case 'cAlias':
					$oField->setLength(40);
				break;
				case 'cObservacion':
					$oField->setEditor();
				break;
				case 'cCelular':
					$oField->setLength(20);
					if ( $this->getOptionsLevel() > 1 ) $oField->setOnBlur($this->getVerifyEvent());
				break;
				case 'Documento':
					$oField->aInput['nDocumento']->setLength(11);
					$cSql = "SELECT ncTipoDocumento, cAbreviatura FROM acTipoDocumento";
					$oField->aInput['ncTipoDocumento']->setMatrix ( $this->oDatabase->getMatrix( $cSql ) );
				break;
				case 'ncGenero':
					$cSql = "SELECT ncGenero, cdGenero FROM acGenero";
					$oField->setMatrix ( $this->oDatabase->getMatrix( $cSql ) );
				break;
				case 'ncProfesion':
					$oField->setForm( $this );
					$cSql = "SELECT ncProfesion, cdProfesion FROM atProfesion";
 					$oField->setMatrix ( $this->oDatabase->getMatrix( $cSql ) );
					$oField->addActionArray( 2, $this->oModule->getActionArray( AGREGAR_PROFESION ) );
					$oField->addActionArray( 3, $this->oModule->getActionArray( MODIFICAR_PROFESION ) );
				break;
				case 'cImagen':
					$oField->setForm( $this );
				break;
				case 'ncDomicilio':
					$oField->setLabel("Domicilio particular");
					$oField->setFormName( $this->getFormName() );
					$oField->setOptionsLevel(2);
					$oField->setOptionsType( 'I');
				break;
				case 'ncVisibilidad':
					$cSql = "SELECT ncVisibilidad, cdVisibilidad FROM acVisibilidad";
					$oField->setDefault( VISIBILIDAD_PUBLICO );
					$oField->setMatrix( $this->oDatabase->getMatrix($cSql) );
				break;
				case 'ncUbicacion':
					$oField->setForm( $this );
					initializeUbicacion( $oField );
				break;
			}
		}
	}
?>